package com.hll.api.controller;

import com.alibaba.fastjson.JSONObject;
import com.hll.api.config.web.RespMessage;
import com.hll.api.service.HeFengApi;
import com.hll.api.util.HttpUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * @author 何龙
 * @create 2019-06-02 13:10
 */
@RestController
@RequestMapping("/api/weather/v1")
public class HefengApiController {

    @Resource
    HeFengApi heFengApi;


    /**
     * @api {get} /api/weather/v1/now 获取城市实况天气
     * @apiVersion 1.0.0
     * @apiName now
     * @apiGroup weather
     * @apiParam {String} key 接口秘钥
     * @apiParam {String} [city] 城市名称<br>
     * 若没传递城市名称，则取ip所在城市
     * @apiParamExample {string} 请求示例:
     * key=123456&city=西安
     * @apiSuccess {Number} status 状态码,0为接口访问成功
     * @apiSuccess {String} err 错误信息
     * @apiSuccess {Object} datas 成功时返回接口数据
     * @apiSuccess {Object} datas.now 实况天气
     * @apiSuccess {String} datas.now.fl 体感温度，默认单位：摄氏度
     * @apiSuccess {String} datas.now.tmp 温度，默认单位：摄氏度
     * @apiSuccess {String} datas.now.cond_code 实况天气状况代码
     * @apiSuccess {String} datas.now.cond_txt 实况天气状况描述
     * @apiSuccess {String} datas.now.wind_deg 风向360角度
     * @apiSuccess {String} datas.now.wind_dir 风向
     * @apiSuccess {String} datas.now.wind_sc 风力
     * @apiSuccess {String} datas.now.wind_spd 风速，公里/小时
     * @apiSuccess {String} datas.now.hum 相对湿度
     * @apiSuccess {String} datas.now.pcpn 降水量
     * @apiSuccess {String} datas.now.pres 大气压强
     * @apiSuccess {String} datas.now.vis 能见度，默认单位：公里
     * @apiSuccess {String} datas.now.cloud	 云量
     * @apiSuccess {Object} datas.update 接口更新时间
     * @apiSuccess {String} datas.update.loc 当地时间，24小时制，格式yyyy-MM-dd HH:mm
     * @apiSuccess {String} datas.update.utc UTC时间，24小时制，格式yyyy-MM-dd HH:mm
     * @apiSuccess {Object} datas.basic 基础信息
     * @apiSuccess {String} datas.basic.location 地区／城市名称
     * @apiSuccess {String} datas.basic.cid 地区／城市ID
     * @apiSuccess {String} datas.basic.lat 地区／城市纬度
     * @apiSuccess {String} datas.basic.lon 地区／城市经度
     * @apiSuccess {String} datas.basic.parent_city	 该地区／城市的上级城市
     * @apiSuccess {String} datas.basic.admin_area 该地区／城市所属行政区域
     * @apiSuccess {String} datas.basic.cnty 该地区／城市所属国家名称
     * @apiSuccess {String} datas.basic.tz 该地区／城市所在时区
     * @apiSuccessExample {json} 成功示例：
     * {
     * "status": 0,
     * "err": "成功",
     * "datas": {
     * "now": {
     * "hum": "34",
     * "vis": "16",
     * "pres": "957",
     * "pcpn": "0.0",
     * "fl": "27",
     * "wind_sc": "1",
     * "wind_dir": "东南风",
     * "wind_spd": "5",
     * "cloud": "91",
     * "wind_deg": "107",
     * "tmp": "27",
     * "cond_txt": "阴",
     * "cond_code": "104"
     * },
     * "update": {
     * "loc": "2019-06-02 20:58",
     * "utc": "2019-06-02 12:58"
     * },
     * "basic": {
     * "admin_area": "陕西",
     * "tz": "+8.00",
     * "location": "西安",
     * "lon": "108.94802094",
     * "parent_city": "西安",
     * "cnty": "中国",
     * "lat": "34.26316071",
     * "cid": "CN101110101"
     * },
     * "status": "ok"
     * }
     * }
     * @apiErrorExample {json} 返回错误示例:
     * {
     * "status": 2,
     * "err": "秘钥不能为空",
     * "datas": []
     * }
     */

    @GetMapping("/now")
    public RespMessage now(String key, String city, HttpServletRequest request) {
        if (StringUtils.isEmpty( key )) {
            return RespMessage.error( "秘钥不能为空" );
        }
        if (StringUtils.isEmpty( city )) {
            city = HttpUtils.getClientIp( request );
        }
        JSONObject jsonObject = heFengApi.liveWeather( key, city );
        return RespMessage.success( jsonObject, "成功" );
    }

}
